1. 数据链路层的基本概念
数据链路层讨论的是在同一个局域网中,分组怎样从一台主机传送到另外一台主机,这个过程中不会涉及到中间路由器。
数据链路层的作用:数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
- 结点:主机或者路由器
- 链路:网络中从一节点到相邻节点的
物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路和无线链路。一条无源的点到点的物理线路段,中间没有任何其他的交换结点,一条链路只是一条通路的一个部分。 - 数据链路:网络中两个结点之间的
逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成了数据链路
- 帧:链路层的协议数据单元,封装网络层数据报
数据链路层中所说的帧和物理层中所说的帧有什么区别?
在物理层中,我们在时分复用和统计时分复用的时候通常会说
TDM帧和STDM帧,在这个情景下,指的是在物理层传送比特的时候所划分的帧。而在数据链路层中则是数据链路层的PDU,用来对网络层下发下来的IP数据报进行封装
数据链路层:负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传输数据报。它把网络层交下来的数据封装成帧发送到链路上,以及把接收到的帧中的数据取出来并且上交到网络层。
在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报或者包)。数据链路层封装的帧,在物理层编程数字信号链路上传输。
数据链路层的信道类型
- 点对点通信:使用一对一的点对点的通信方式
- 广播信道:使用
一对多的广播通信方式,必须使用专用的共享信道协议来协调这些主机的数据发送
2. 数据链路层的三个基本功能
2.1 封装成帧
封装成帧:就是将在网络层的IP数据报的前后分别添加其首部和尾部,这样就构成了一个帧
- 不同的数据链路层协议的帧的首部和尾部包含的信息有明确的规则,帧的首部和尾部有帧开始符合帧结束符。这些符号称为帧定界符。发送帧的时候是从帧的首部开始发送的
- 接收端收到物理层传过来的比特流后,就可以根据首部和尾部的标记,从收到的比特流中识别到帧的开始和结束
- 一个帧的帧长等于帧的数据部分长度加上帧首部和尾部的长度
- 在数据传输中出现差错的时候,帧定界符的作用就会更加明显
假设发送端在尚未发送完一个帧的时候突然出了故障,中断了发送,但随后很快恢复了正常,于是重新从头开始发送刚才没有发送完的帧,由于使用了帧定界符,接收端就知道前面接收到的数据是一个不完整的帧
(只有首部开始符SOH而没有传输结束符EOT),这时候必须丢弃掉这个帧,而后面接收的数据有明确的帧定界符SOH和EOT,所以是一个完整的帧
- 每一种数据链路层协议都规定了所能传送的帧的数据部分长度的上限
- 也就是最大传输单元
MTU(Maximum Transfer Unit),以太网的MTU是1500个字节
2.2 透明传输
由于帧的开始和结束的标记使用专门指明的控制字符,因此所传输的数据中的任何8bit的组合一定是不允许和用作帧定界的控制字符的比特编码一样
**透明传输 **:表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层,因此,对于所传送的数据来说,这些数据就看不见数据链路层存在有什么因素是影响数据传输的。
- 透明:某一个实际存在的事物看起来却好像不存在一样,
帧开始符和帧结束符最好是不会出现在帧的数据部分的字符。
通常我们电脑键盘能够输入的字符是ASCII代码表中打印的字符,在ASCII字符代码表中,还有非打印控制字符,在非打印控制字符中有两个字符专门用来做帧定界符,代码SOH(start Of Header)作为帧开始定界符,对应的二进制编码为0000 0001,代码EOT(End Of Transmission)作为帧结束定界符
如下图所示,当数据部分是非ASCII字符代码表的文本文件的时候(比如二进制代码的计算机程序或者图像),情况就不同了。如果数据中的某一段二进制代码正好和SOH或者EOT帧定界符编码一样,接收端就会误认为这就是帧的边界。
为了解决透明传输的问题,就必须设法使得数据中可能出现的控制字符SOH和EOT在接收端不被解释为控制字符。
一般来说,有两种方法,字节填充或者字符填充
具体的解决办法是:在SOH或者EOT的前面插入一个转义字符ESC,而在接收端的数据链路层将数据上交到网络层之前,将这个转义字符从数据流中删除,如果传输的数据也出现了这样的转义字符,那么解决办法就是在这个数据之前也加上一个转义字符,当接收端收到连续的两个转义字符的时候就会删除其中的一个
注意:字节填充这个事情是数据链路层做的
2.3 差错检验
现实中的通信链路都不会是理想的,这就是说,比特在传输过程可能会产生差错。
比如说1可能变成0,0也有可能变成1,这种差错叫做
比特差错传输错误的比特占所传输比特总数的比率叫做
误码率(Bit Error Rate)误码率与信噪比有很大的关系,如果设法提高信噪比,就可以使得误码率降低,但是不可能降低为0
为了保证数据传输的可靠性,在计算机网络传输数据的时候,必须采用各种差错检测措施,目前在数据链路层广泛使用了循环冗余检验CRC的差错检验技术
要想让接收端能够判断帧在传输过程是否出现差错,这就需要在传输帧中包含用于检测错误的信息,这部分信息就被称为帧校验序列FCS,注意,FCS检验的是数据报和帧首部的数据是否有差错。
- 除数:只要发送端和接收端都使用一个除数即可,可以自行选择
- 同时要注意,数据报补全数据的选择是,在后边加上(除数的位数-1)位的零
流程简述:首先发送端在原始数据后面加上n位的冗余码发送给接收端,接收端拿到这个数据之后,直接拿这个数据去处于那个他们双方约定好的除数,其中比较关键的就是这n位的冗余码,这冗余码是通过接收方的数据去除于他们规定的除数得到的余数。
如果得出来的余数=0,那么就判断这个帧没有差错,就接收
如果余数不等于0,那么这个帧就出现了差错。
如果在数据链路层上要进行差错检验,那么就必须把数据划分为帧,每一帧都加上一个冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。
如果仅仅采用的是循环冗余检验技术,那么就只能做到无差错的接受,也就是说对于有差错的帧是是只能够被丢弃的,在这种情况下,凡是接收端数据链路层接受的帧都没有差错
一类差错是最基本的比特差错,但是还有一类差错就会更复杂一些,也就是说帧中的数据是正确的,能够通过检验但是:
帧丢失:收到[#1]、[#3],丢失掉了[#2]帧重复:收到[#1]、[#2]、[#2]、[#3]帧失序:收到序列为[#1]、#[3]、#[2]
以上三种情况都是属于出现传输差错的
3. 点到点信道数据链路层
点到点信道是指一条链路上就一个发送端和接收端的信道,通常用在广域网的链路
3.1 PPP协议的特点(Point-to-Point Protocol点对点协议)
仅支持全双工链路
简单:不提供可靠传输,有错误则直接丢失而不是纠正
封装成帧:封装帧的首部和帧尾部,关键是帧开始符和帧结束符
透明传输:如果传输的数据里面有帧定界符,则会在传输的时候进行转移,在接收后取出
差错检测:CRC计算FCS
支持多种网络层协议:在同一条物理链路上支持IP或者IPX等网络层协议,如果点对点链路上所连接的是局域网或者路由器的时候,PPP协议必须支持所在链路所连接的局域网或者路由器上运行的各种网络层协议
多种类型链路(物理意义):光纤、铜线、同步、异步、串行、并行
检测链接状态:自动检测链路是否处于正常工作的状态
最大传送单元:设置MTU的标准值,默认的值是1500Byte,值得注意的是MTU指的是帧的数据部分的最大长度,一旦超过这个长度就必须丢弃这样的帧并且返回差错。
网络层地址协商:提供一种机制使得通信的两个网络层的实体能够通过协商知道或者能够配置彼此的网络地址。
数据压缩协商:协商使用数据压缩算法
关于PPP协议不需要的功能
- 不需要纠错,只需要检查
- 不需要流量控制
- 不需要序号机制
- 不需要多点线路
(只需要点对点的功能)- 不需要考虑半双工或者单工链路
3.2 PPP协议的组成
在广域网中通常使用串行,短距离使用并行
PPP协议的组成部分
- 将
IP数据报封装到串行链路的方法,PPP支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路,IP数据报在PPP帧中是信息部分,这个信息部分的长度受MTU的限制 - 一个用来建立、配置和测试数据链路连接的链路控制协议
LCP(Link Control Protocol),通信的双方可以协商一些选项 - 一套网络控制协议
NCP(Network Control Protocol):其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet和AppleTalk
3.3 PPP协议帧的格式
首部:4个字段
- 标志字段F:表示帧的开始,标志字段就PPP帧的定界符,连续两帧之间只需要用一个标志字段,如果出现了两个连续的标志字段,那么就证明这个帧是空帧,应该被丢弃x
- 地址字段A:0xFF实际上不起作用
- 控制字段C:通常设置为0x03
- 协议字段
- 当协议字段为0x0021的时候,信息字段存储的就是IP数据报
- 当协议字段为0xC021的时候,信息字段就是PPP链路控制协议
LCP的数据 - 当协议字段为0x8021的时候,表示这是网络层的控制数据
尾部:两个字段
- FCS:CRC帧检验序列
- F:标志字段,用来标志帧的结束
3.4 同步传输和异步传输(透明传输)(了解)
同步(synchronous Transmission)传输:以比特为单位传输数据(但是是连续的比特),可以采用字符形式或者位组合的形式帧同步信号。在短距离的高速传输中,该时钟信号可以由专门的时钟线路来传输,由发送端或者接收端提供专用于同步的时钟信号。计算机网络采用同步传输方式时,常将时钟同步信号(前同步码)植入数据帧中,以实现接收端和发送端的时钟同步。以比特为单位进行传输
实际上读取同步码的过程就是一个获取码元边界的过程,避免读取的码元不完整。
异步(Asynchronous Transmission)传输:传输的是字符,发送端和接收端具有独立的时钟(频率不能够差太多),并且两者中任一方都不向对象提供时钟同步信号,以字节为单位进行传输
- 异步传输使用字节填充
当PPP使用异步传输的时候,数据传输以字节为单位,PPP帧的转义符定义为0X7D,使用字节填充,如图
执行流程如下
- 把信息字段中出现的每一个
0x7E转变为两字节序列(0x7D,0x7E) - 如果信息字段中出现了
0x7E的字节,那么就把0x7D转变成(0x7D,0x5D) - 如果信息字段中出现了一个
ASCII码的控制字符,也就是说是数值小于0x20的字符,那么就在该字符的前面加入一个0x7D,同时把这根字符的编码加以改变,比如说出现了0x03,在规定的A(控制字段)是传输结束的意思,就要把它转变为2字节序列的(0x7D,0x23)
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数,但是在接收端接收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息
- 同步传输使用0比特填充
在同步传输的链路上,一连串的比特连续传送而不是异步传输,PPP协议使用零比特填的方法来实现透明传输。大家把PPP协议定界符0x7E写成二进制的0111 1110,可以看到中间有连续的6个1,只要想办法在数据部分不要出现连续的6个1,就肯定不会出现这种界定符,具体的办法就是0比特填充。
零比特填充的执行流程:
在发送端,先扫描整个信息字段,只要发现有5个连续的1,那么就会立即填入一个0。
在接收端,先找到标志字段F以确定一个帧的边界,接着用硬件对其中的比特流进行扫描,每当发现5个连续的1的时候,就把这5个连续1后的一个0删除,注意,扫描的应该也只是扫描的是信息字段而非全部,因为发送端只在信息字段做了处理,这样就可以还原成原来的信息比特流了。
3.5 PPP协议的工作状态
PPP链路初始化状态:
用户拨号接入ISP后,就建立了一条从用户个人电脑到ISP的物理连接
用户个人电脑向ISP发送一系列的链路控制协议LCP分组,封装成多个PPP帧,以便建立LCP连接
之后进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配一个临时的IP地址
当用户通信完毕后,NCP释放网络层连接,收回原来分配出去的地址。LCP释放数据链路层的连接,最后释放物理层连接
PPP链路的起始和终止状态永远都是链路静止状态,这时候在用户个人电脑和ISP路由器之间并不存在物理层的连接
当用户个人电脑通过调制解调器呼叫路由器的时候,路由器就能够检测到调制解调器发出的载波信号,在双方建立了物理层连接之后,PPP就进入了链路建立(Link Establish)的状态,其目的是建立链路层的LCP连接
这时候LCP开始协商一些配置选择,也就是发送LCP的配置请求帧Configure-Request。这是一个PPP帧,其协议字段字段设置为LCP对应的代码,而信息字段包含特定的配置请求,链路的另一端可以发送以下几种响应中的一种
配置确认帧(Configure-Ack):所有的选项都接受配置否认帧(Configure-Nak):所有选项都理解但是不能接受配置拒绝帧(Configure-Reject):选项有的无法识别或者不能接受,需要协商
LCP配置选项包括连链路上的最大帧长,所使用的
鉴别协议,以及不使用PPP帧中的地址和控制字段(这两个字段的值是固定的,没有任何的信息量,可以在PPP帧的首部省略这两个字节)
协商结束后就建立了LCP链路(这里始终要记得LCP是PPP的组成部分之一,是用来协商链路的连接等相关事项的一个协议),然后就进入了鉴别(Authenticate)状态
在这个状态下,只允许传送LCP协议的分组、鉴别协议的分组以及监测链路质量的分组
如果使用口令鉴别协议PAP(Password Authentication Protocol),那么就需要发起通信的一方发送身份标识符和口令,系统允许用户重试若干次,还可以使用口令握手鉴别协议CHAP,如果鉴别身份失败了,那么就应该转到链路终止(Link Terminate)的状态,如果鉴别成功,那么进入到了网络层协议(Network-Layer Protocol)
理解:LCP链路是为了更好的进行后面的帧的传输,在初始过程中需要规定好帧是怎么传的,在做好这个工作的基础上,才能进行后面的权限认证等工作,因为这些工作也都需要基于链路完好的基础上进行,否则无从谈起
进入到网络层协议状态的时候,PPP链路两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。PPP协议两端的网络层可以运行不同的网络层协议,但是仍然可以使用同一个PPP协议进行通信
这个怎么理解呢,就是说两个节点内部的网络层,运行的网络层协议可以是不同的,但是双方交换信息的链路,要采用同一个
NCP协议进行通信
如果在PPP链路上运行的是IP协议,那么对于PPP链路的每一端配置IP协议模块时就要使用NCP中支持IP的协议–IP控制协议(IP Control Protocol),IPCP分组也封装为PPP帧在PPP链路上进行传送。
当网络层配置完毕之后,链路就进入到了可进行数据通信的链路打开(Link Open)状态,链路的两个PPP端点可以彼此向对方发送分组,两个PPP端点还可以发送回送请求LCP分组(Echo-Request)和回送回答LCP分组(Echo-Replay)以检查链路的状态
数据传输结束后,可以由链路的一段发出终止请求LCP分组(Terminate-Request)请求终止链路的连接,在收到对方发来的终止确认LCP分组(Terminate-Ack)之后,就会转到链路中放置的状态,当调制解调器的载波停止之后,就会回到链路静止的状态
4. 广播信道的数据链路层
4.1 局域网结构及其特点
局域网的特点:网络是一个单位所拥有的,而且地理范围和站点数目都是有限的
- 具有广播功能,从一个站点可以很方便地访问全网
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和生存性
关于局域网的分类
局域网可以按照网络拓扑结构进行分类,如下图所示
- 星形网:由于
集线器(hub)的出现和双绞线大量应用于局域网中。 - 环形网
- 总线网:各站点直接连接在总线上,总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射
目前为止,以太网已经成为了局域网的同义词。
4.2 共享信道技术
静态划分信道技术
- 如使用频分复用、码分复用、时分复用、波分腹痛
用户只要分配到了信道就不会和其他用户发生冲突,但是这种划分信道的方法代价很高,不适用于局域网
动态媒体接入控制
又叫做多点接入(multiple access),特点是信道并不是在用户通信时的固定分配给用户的,可以分成两类
- 随机接入:随机接入技术的特点是所有的用户可以随机地发送信息,但是如果恰巧有两个或者更多的用户在同一时刻发送信息,那么在共享的媒体上就会产生碰撞,也就是发生
冲突,使得这些用户的发送都失败,在这个假设下,必须设计出关于解决碰撞的可用的网络协议 - 受控接入:受控接入的特点是用户不能随机地发送信息而必须服从一定的控制,这类典型代表有分散控制的令牌环局域网和集中控制的多点线路探询或者称为轮询
适配器的作用
硬件地址是存在适配器的ROM中的,而IP地址则是存储在计算机的存储器之中的。
4.3 带冲突检测的载波侦听多路访问技术(CSMA/CD)
总线的特点:当一台计算机发送数据的时候,总线上的所有计算机都能检测到这个数据,这种就是广播通信的方式。
为了在总线上实现一对一的通信,可以使得每一台计算机的适配器都拥有一个与其他适配器都不同的地址,为了在总线上实现一对一的通信,可以使得每一台计算机的适配器都拥有一个与其他适配器都不同的地址。在发送数据帧的时候,在帧的首部写明接收站的地址,仅当数据帧中的目的地址与适配器ROM中存放的硬件地址一致的时候,这个适配器才能接收这个数据帧,如果这个数据帧不是发送给自己的就丢弃。
为了通信的简便,以太网采取了下面的措施
- 采用了较为灵活的
无连接的工作方式,不需要先建立连接就可以直接发数据,适配器对发送的数据帧不进行编号,也不要求对方进行回应,以太网提供的服务是尽最大努力进行交付的,也就是不可靠的交付,然而对差错帧是否需要重传那么需要高层进行决策,如果需要重传,传输层->网络层交付下来的数据重新传递给以太网进行重传,然而以太网对于这个帧是当做新的数据帧来发送的 - 在同一时间只能允许一台计算机发送数据,使用载波监听多点接入/碰撞检测的协议(CSMA/CD)
- 以太网发送的数据都是使用曼彻斯特编码的信号
CSMA/CD协议的要点
- 多点接入:说明这是总线型网络,许多计算机以多点接入的方式连接在一根总线上,协议的本质是
载波监听和碰撞检测 - 载波监听:这里书上说其实载波的翻译是不对的,翻译成媒体或者载体应该更加合适一些,因为其本质是
不管在想要发送数据之前,还是在发送数据之中,每个站点都必须不停地检测信道,因此侦听的对象是传输信号的载体,这样理解起来比较通畅。 - 碰撞检测:是适配器边发送数据边检测信道上的信号电压的变化情况,当两个或者几个站同时在总线上发送数据的时候,总线上的信号电压的变化幅度将会增大,当超过一定的门限之后,就认为总线上至少有两个站在同时发送数据。一旦发生碰撞,那么适配器就要立即停止发送数据,避免无效的数据发送使得网络资源被浪费。
既然每一个站在发送数据之前已经监听到信道为空闲,那么为什么还会出现数据在总线上发生碰撞呢?
这是因为电磁波在总线上总是以有限的速率进行传播的,因此即使两个站点在发送数据之前发现信道是空闲的,但是电磁波在信道上进行传输也是需要时间的,如果数据没有完全被接收方所接收,而这时候电磁波相遇了,这时候的数据也产生失真,也是无效的。
电磁波在1km电缆的传播时延约为5us
使用CSMA/CD协议的网络就是以太网。点到点链路就不用冲突检测,因此不需要使用CSMA/CD,与之对应的,每个设备都需要有MAC
以太网的标准:以太网是一种计算机局域网技术。它给出了以太网介质访问控制协议(CSMA/CD)以及物理层技术规范
总线型网络使用CSMA/CD协议进行通信,即带冲突检测的载波侦听多路访问技术
- 即便检测出总线上没有信号,开始发送数据后也有可能和迎面而来的信号在链路上发生碰撞
- 显然地,一个站点不可能同时进行发送和接收,但是必须边发送边监听信道,使用
CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)
关于CSMA/CD中的一些重要时刻的解读
在局域网的分析中通常把总线上的单程端到端的传播时延叫做τ
如果A发送数据后,最迟要经过多长的时间才能知道自己发送的数据是否和其他站发送的数据有没有发生碰撞?这个时间最多是两倍的总线端到端的传播时延
(2τ)为什么是
2τ?我们假设一下,如果电磁波从总线的最左端出发,在中间某点就发生了碰撞,那么从发送数据到发生碰撞所经历的时间是不是肯定小于τ?然后这个碰撞的信号传回去的时间是不是肯定小于τ那么如果在中间发生碰撞,A从发送数据到检测到发生碰撞所用的时间肯定是小于2τ的。极端的,我们假设要从最左边发送数据到最右边,然后当最左边刚到达最右边的时候,最右边的节点突然发送数据,这时候肯定会发生碰撞,然后这个时候要把碰撞的信息传回去给最左端,这时候所用的时间近似于
2τ因此,最多的时长肯定是2τ,因为这个考虑了一种最为极端的远程传输数据的情况。下面给出了一个比较严谨的数学证明方式
当t=0的时候,A发送数据,B检测到信道为空闲
当t=τ-δ(τ>δ>0)的时候,A发送的数据还没有到达B的时候,由于B检测到信道是空闲的,因此B发送数据
当当经过了δ/2之后,也就是在t=τ-δ/2的时候,A发送的数据和B发送的数据发生了碰撞,但是这时候A和B都不知道发生了碰撞
这里解读一下为什么是经过
δ/2之后肯定发生碰撞,我们知道在τ-δ的时候,距离A发送的数据到达B还有δ的时间,然后这时候B发送数据,我们假设在信道中传输的信号的功率是一样的,那么也就是说信号是以相同的速度在信道中进行传输的。相当于两个人同时面对面跑步,他们的距离是S,原本如果B不动的话,只有A在跑,那么要花
δ的时间,但是现在A和B同时面对面跑,而且速度是一样的,那么他们撞到一起的时间就是一半了δ/2
在经过δ/2之后,也就是t=τ的时候,碰撞之后的信息回传到了B,B检测到了碰撞
在t=2τ-δ的时候,A也检测到了碰撞,因此也停止发送数据。
当δ->0的时候,此时tA=2τ
通过之前的计算,我们知道A如果想要检测到碰撞的最长的时间是2τ,如果在2τ内都没有检测到碰撞,那么肯定就没有碰撞,我们将这个2τ称作争用期,碰撞窗口
- 为了能够检测到正在发送的帧在总线上是否产生冲突,以太网的帧不能够太短,如果太短就有可能检测不到自己发送的帧产生了冲突。
在这里首先纠正我自己一直以来的一个误区,就是我一直认为CSMA/CD协议在数据全部发送出去还在监听,直到到了窗口期才结束监听的,这个观点是错误的,我们回到原本的定义,
CSMA/CD协议的工作核心是边发送边监听,也就是说当发送端将数据全部发送出去之后,它就认为大功告成了,是这样一个意思。因此在这个前提下,为了使得在数据发送完毕之前能够度过这个争用期,产生了这样一个以太网最短帧
如果帧太短,那么就无法感知到是否发生了碰撞,也就是说发生了碰撞后,信号继续在线路上传输,而设备之间无法感知到这次碰撞,依然在接收碰撞产生的数据,碰撞回传的信号依然在路上,当碰撞回传的信号回来的时候,计算机A认为在整个发送过程中,整个数据包都送出去了,都没有发生碰撞,那就是发送成功了,后来传回来的这个信号,他认为是其他设备发生的碰撞,这样就导致了错误发生。
如何避免这个问题呢?
挑选一个合适的帧长度,这个帧长度能够确保在回收到碰撞信号的时候,设备依然在发送数据。
解释一下这个公式,
10Mb/S*51.2us,首先这个往返时延是指一个比特从最左端发送出去又回到最左边所用的时间,然后用因此在第一个比特返回到最左端的时候,这个时候刚好经历过一个2τ,然后我们要的功能就是,在这个第一个比特回来我们左端的时候,左端依然在发送数据,根据发送的速率是10Mb/s,就可以计算出我们要发送多长的数据了
- 解决冲突的方法:退避算法
每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性,这一小段时间是不确定,它取决于另一个发送数据的站到本站的距离,因此,以太网不能保证在检测到信道空闲后的某一时间内,一定能够将自己的数据帧成功地发送出去,因为存在产生碰撞的可能,以太网的这一特点称为发送的不确定性
总线型网络中的计算机数量越多,在链路上发送数据产生冲突的可能性就越大
以太网使用截断二进制指数退避算法来确定重传的时机,这种算法的核心是让发生碰撞的站在停止发送数据后,不是等待数据变为空闲后立即再发送数据,而是退避与一个随机的时间。
退避算法的具体规定
- 基本退避时间初始化为
争用期2τ具体的争用时间为51.2us,对于10Mbit/s以太网而言,在争用期可以发送512比特,也就是64个字节,也可以说争用期是512比特时间(1比特时间就是发送1个比特所需要的时间),也可以直接使用比特作为争用期的单位。 - 从离散的整数集合
[0,1,...,(2^k-1)]中随机取出一个数,记作为r,重传应该推后的时间就是r*争用期,上面的参数k按照下面的公式来进行计算,k=min(重传次数,10)
可见当重传的次数不超过10的时候,参数k就等于重传的次数,而重传次数最多等于10
- 当重传达到16次依然不能够成功的时候,这表明以太网内打算同时发送数据的站太多了,导致一致产生冲突,那么就丢弃这个帧并且向高层报告
例如,在第一次重传的时候,k=1,随机数列表是[0,1,...,(2^k-1)]=[0,1],这时候可以选的重传的推迟时间是0或者是2τ
如果再发生碰撞,那么随机数列表就是[0,1,2,3]
如果多次发生冲突,那么就表明了可能有很多的站参与信道的占用,但是这种动态退避机制需要推迟平均时间随着重传次数而增大,这也叫做动态退避,因而减小发生碰撞的概率。
我们还应该注意到,适配器每发送一个新的帧,就要执行一次
CSMA/CD算法,适配器对过去发生过的碰撞是没有记忆功能的,因此,可能出现这样的情况,当好几个适配器正在执行指数退避算法的时候,很有可能有一个新发送的帧能够碰巧成功地插入到信道中,得到了发送权,而退避了几次发送的站可能还要执行退避算法。
强化碰撞
当发送的数据站一旦发现发生了碰撞的时候,除了要立即停止发生数据,还要继续发送32bit或者48bit的人为干扰信号,以便让所有用户都知道现在发生了碰撞
从图可以看出,A站从发送数据开始到发现碰撞并停止发送的时间间隔是
TBA站得知碰撞已经发生时所发送强化碰撞的干扰信号的持续时间
TJ图中的B站在得知发生碰撞之后,也要发送强化碰撞的干扰信号,但图中并没有画出
发生碰撞使得A要浪费
TB+TJ,可是对于整个信道上的机器来说,还要增加一个τ,因为信号的传播也需要时延,因此总线被占用的时间就是TB+TJ+τ
此外,以太网还规定了帧间最小间隔是9.6us
总结:CSMA/CD协议要点
(1) 准备发送:适配器接收从网络下来的一个分组,加上以太网的首部和尾部(CRC和F),然后组装成以太网,放入适配器的缓存中,在发送信号需要确认信道是否空闲。
(2)检测信道:如果检测到信道正忙,那么就需要不断轮询,等到信道转为空闲,然后在这个时刻,计时96个比特时间,如果达成了这两个条件,那么就发送这个帧(前者是为了保证信道空闲,后者是为了保证帧间的最小间隔)。
(3)边发送边监听:在发送过程中不断监听信道是否有碰撞
(3-1)发送成功:在争用期内一直没有检测到碰撞,那么就认为发送成功,如果接收方收到了差错的帧就丢弃
(3-2)发送失败:在争用期内检测到碰撞,立即停止发送数据,并且按规定发送干扰信号,执行指数退避算法,等待r倍的512比特时间后,返回到步骤2,重传16次不成功向高层报告
以太网每发送完一帧,一定要把已发送的帧暂时保存一下,如果在争用期内检测到了碰撞,那么还要推迟一段时间后再重传这个帧。
- 以太网的帧格式
常用的以太网MAC帧格式有两种标准,一种是EthernetV2标准(也就是以太网V2标准),另一种是IEEE的802.3标准,使用得最多的是以太网V2的MAC帧格式
前两个字段分别是目标MAC地址和源MAC地址
第三个字段是类型字段
最小帧是64个字节。如果数据字段的长度小于46个字节的时候,数据链路层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64个字节,接收端还必须能够将添加的字节给去掉
- 以太网信道利用率
利用率是指发送数据的时间占整个时间的比例。
如图所示,平均发送一帧所需要的时间,经历了n倍的争用期,T0为发送该帧所需的时间,τ为该帧的传播时延
$$S = \frac{T_{0}}{n2τ+t0+τ }$$
从公式可以看出,要想提高信道利用率,最好的情况下是不发生冲突,也就是n=0,这种情况算出来的信道利用率就是极限信道利用率
$$S_{max} = \frac{T_0}{T_0+τ} = \frac{1}{1+\frac{τ}{T_0}}$$
要想提高极限信道利用率,就要降低公式中
$$\frac{τ}{T_0}$$
τ值和以太网连线的长度有关,这就以太网网线的长度就不能太长。
一定情况下的T0和帧的长度有关,这就意味着以太网的帧不能太短
4.4 以太网的MAC层
硬件地址又称为物理地址,或者MAC地址,这种48位的地址应当是某个接口的标识符
IEEE注册管理机构RA负责向厂商指派前3个字节,后面3个字节由厂家自行指派,称为扩展标识符
- 网卡的作用
网卡是工作在链路层和物理层的网络组件,是局域网中连接计算机和传输截止的接口。
不仅能实现与局域网传输截止之间的物理连接和电信号的匹配,还涉及帧的发送与接收,帧的封装与拆封,帧的查错校验,介质访问控制等(以太网使用CSMA/CD协议)、数据的编码与解码以及数据缓存的功能
- 单站地址,组地址,广播地址
IEEE规定地址字段的第1字节的最低位是I/G
单站地址I/G=0
组地址I/G=1,组地址用来进行多播
广播地址:所有48位都为1,只能作为目的地址来使用
IEEE 把地址字段第 1 字节的最低第 2 位规定为 G/L (Global / Local) 位。
全球管理:G/L 位 = 0。厂商向 IEEE 购买的 OUI 都属于全球管理。
本地管理:G/L 位 = 1。 这时用户可任意分配网络上的地址。
适配器具有过滤功能
每收到一个MAC帧,先用硬件检查帧中的MAC地址
如果是发往本站的则收下,否则就将此帧丢弃
4.5 扩展的以太网
- 集线器
传统以太网最初是使用同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和灵活的双绞线
集线器和网卡一样工作在物理层
可以将多个集线器连接在一起形成一个更大的以太网,这不仅可以扩大以太网中计算机的数量,还可以扩展以太网中计算机的数量,还可以扩展以太网的覆盖范围,使用主干集线器连接教室中的集线器,形成一个大的以太网。
碰撞域:称为冲突域,指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或者冲突的那部分网络
- 使用网桥优化以太网
网桥能够基于MAC地址表,查找转发端口,从而减少了碰撞域
- 网桥自动构建MAC表
使用网桥优化以太网,对于网络中的计算机是没有感觉的,也就是说以太网中的计算机是不知道网络中有网桥存在的,也不需要网络管理员配置网桥的MAC地址表,因此我们称网桥是透明桥接
网桥接入以太网的时候,MAC地址表示为空,网桥会在计算机通信的过程中自动构建MAC地址表,这种称为自学习
- 自学习
网桥的接口收到一个帧,就要检查MAC地址表中收到的帧源MAC地址有无匹配的项目,如果没有匹配的项目,就在MAC地址表中添加该接口和该帧的源MAC地址对应关系以及进入接口的时间,如果有,则把原有的项目进行更新
- 转发帧
网桥接口收到一个帧,就检查地址表中有没有该帧目标MAC地址对应的端口,如果有,就会将该帧转发到对应的端口,如果没有,则会将该帧广播到全部端口,除了它自己
这里推荐一个视频
广播域(broadcast domain :指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
- 多接口的网桥
5. 虚拟局域网
5.1 传统以太网存在的问题
以太网存在的主要问题主要有:广播风暴、安全问题、管理困难
当以太网中形成冗余链路(回路)的时候就会形成广播风暴
交换机每个接口都处于一个独立的碰撞域中,但所有计算机都处于一个广播域中,指的是交换机互相直连的情况下,这种情况无法隔离不同部门的通信
可以利用生成树协议解决上面的问题
- 生成树协议STP(Spanning Tree Protocol):不改变网络的实际拓扑结构,但是在逻辑上切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构。
5.2 虚拟局域网简介
虚拟局域网其实只是局域网用户提供的一种服务,并不是一种新型的局域网
这每个虚拟局域网都是一个广播域,例如 VLAN1,VLAN2,VLAN3是三个不同的广播域
- 当B1向VLA12工作内成员发送数据的时候,工作站B2、B3将会收到其广播的信息
B1发送数据的时候,VLAN1和VLAN3组内成员都不会收到广播消息
虚拟局域网限制了接收广播信息的工作站的数目,使得网络不会因为传播过多的广播信息(“广播风暴”)而引起性能的恶化
5.3 划分虚拟局域网的方法
- 基于交换机端口的方法
最简单,也是最常用的方法
属于在第1层划分虚拟局域网的方法,其缺点是不允许用户进行移动
- 基于计算机网卡的MAC地址的方法
根据用户计算机的MAC地址划分虚拟局域网
属于在第2层划分虚拟局域网的方法
允许用户进行移动
其缺点是需要输入和管理大量的MAC地址,如果用户的MAC地址改变了,那么就需要管理员重新配置VLAN
- 基于协议类型的方法
根据以太网帧的第三个字段”类型”确定该类型的协议属于哪一个虚拟局域网
- 基于子网IP地址的方法
根据以太网帧的第三个字段”类型”和IP分组首部中的源IP地址字段确定该IP分组属于哪一个虚拟局域网
- 基于高层服务的方法
根据高层应用的服务、或者它们的组合划分虚拟局域网
5.4 虚拟局域网使用的以太网帧格式
6. 高速以太网
6.1 100M以太网
100BASE-T是在双绞线上传送100Mb/s系基带信号的星型拓扑的以太网,使用的是CSMA/CD协议,它又称为快速以太网
使用交换机组建的100BASE-T以太网,可以在全双工的方式下工作而无冲突发生。因此CSMA/CD协议对于基于交换机组建的以太网是不起作用的。因为其帧格式和以太网一样,因此称交换机组件的网络为以太网。
以太网的最短帧的带框和链路长度有关,100M以太网比10M以太网速率提高了10倍,要想和10M以太网兼容,就要确保最短帧也是64字节,那就将电缆最大长度由1000M降到100m,因此以太网的争用期依然是5.12us。最短帧依然是64字节
6.2 吉比特以太网
- 允许在1Gbits/s下以全双工和半双工2种方式进行工作
- 使用 IEEE 802.3 协议规定的 MAC 帧格式。
- 在半双工方式下使用 CSMA/CD 协议,而在全双工方式不使用 CSMA/CD 协议。
- 与 10BASE-T 和 100BASE-T 技术向后兼容。
半双工方式工作的吉比特以太网
半双工时采用 CSMA/CD,必须进行碰撞检测。
为保持64字节最小帧,以及100米网段的最大长度,增加了2个功能
- 载波延迟:将争用时间增 b 大为 512 字节。凡发送的 MAC 帧长不足 512 字节时,就用一些特殊字符填充在帧的后面。
- 分组延迟
当很多短帧发送时,第一个短帧采用载波延伸的方法进行填充,随后一些短帧可一个接一个地发送,只需要留有必要的帧间最小间隔即可。这样就形成一串分组的突发,直到达到1500字节或者稍多一些
全双工方式工作的吉比特以太网不使用载波延伸和分组突发
它只工作在全双工模式下,因此不存在争用的问题,也不使用CDMA/CD协议。
6.3 端到端的以太网传输
以太网的工作范围已经扩大到了城域网和广域网,实现了端到端的以太网传输
6.4 使用以太网进行宽带的接入
以太网宽带接入具有以下特点:
- 可以提供双向的宽带通信。
- 可以根据用户对带宽的需求灵活地进行带宽升级。
- 可以实现端到端的以太网传输,中间不需要再进行帧格式的转换。
- 但不支持用户身份鉴别。
7. 练习题
3-07
要发送的数据为1101011011。采用CRC的生成多项式是P(X)=X4+X+1。试求应添加在数据后面的余数。数据在传输过程中最后一个1变成了0,问接收端能否发现?若数据在传输过程中最后两个1都变成了0,问接收端能否发现?采用CRC检验后,数据链路层的传输是否就变成了可靠的传输?
这道题考察的CRC冗余检测技术的应用。解题步骤如下:
求除数:首先由CRC的生成多项式
P(X) = X4+X+1,那么以多项式表示出来就是1*X^4+0*X^3+0*X^2+1*X^1+1*X^0,用位表示出来就是10011,这个的话就是除数求被除数:注意到除数具有5位,则被除数需要向左移(5-1)位,也就是加四个0,那么被除数就是
1101 0110 1100 00开始运算除法,用被除数除于除数,计算方法是每个位做异或,不足5位的要将被除数上的数拉下来补足。
计算得余数为
1110,这个余数应该添加到数据的后面。开始模拟,当数据最后一位1变成0之后,那么除数就变成了
1101 0110 10 1110,同理计算得到其余数为011,不为0,是可以发现的当数据最后两位1都变成0之后,那么除数就变成了
1101 0110 00 1110,计算得到其余数为101,其余数不为0,可以发现